package com.design.pattern.strategy.entity;

import com.design.pattern.strategy.behavior.FlyBehavior;
import com.design.pattern.strategy.behavior.QuackBehavior;

/**
 * @author wangyingjie
 * @date 2018年10月12日13:59:05
 * @remark 所有鸭子的父类（策略设计模式）
 */
public abstract class Duck {

    /**
     * 叫行为
     */
    QuackBehavior quackBehavior;

    /**
     * 飞行行为
     */
    FlyBehavior flyBehavior;

    /**
     * 描述
     */
    public abstract void display();

    /**
     * 装饰后的飞行行为
     */
    public void performFly(){
        flyBehavior.fly();
    }

    /**
     * 装饰后的叫行为
     */
    public void performQuack(){
        quackBehavior.quack();
    }

    public void swim(){
        System.out.println("所有鸭子都会游泳");
    }

    public void setQuackBehavior(QuackBehavior quackBehavior) {
        this.quackBehavior = quackBehavior;
    }

    public void setFlyBehavior(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }
}
